Flutter এ Widget Tree এবং Widget গঠন নিয়ে বিস্তারিত আলোচনা নিচে করা হলো। Flutter অ্যাপ্লিকেশনের মূল ভিত্তি হলো Widget, এবং Widget Tree দ্বারা অ্যাপের UI কাঠামো তৈরি করা হয়। প্রতিটি Widget একে অপরের সাথে সম্পর্কিত হয়ে একটি ট্রি (গাছের) আকারে সংগঠিত হয়, যাকে Widget Tree বলা হয়। এটি Flutter এর UI রেন্ডারিং এবং বিল্ড প্রসেসে গুরুত্বপূর্ণ ভূমিকা পালন করে।
Widget Tree কী?
- Widget Tree হলো একটি গঠন, যেখানে প্রতিটি UI উপাদান বা Widget একটি ট্রি স্ট্রাকচারে অবস্থান করে। Flutter এ প্রতিটি Widget এর একটি প্যারেন্ট Widget এবং এক বা একাধিক চাইল্ড Widget থাকতে পারে।
- Widget Tree সাধারণত একটি Root Widget দিয়ে শুরু হয়, যা অ্যাপ্লিকেশনের মূল কাঠামো গঠন করে এবং এর ভেতরে অন্যান্য Widget থাকে।
Widget Tree এর উদাহরণ:
Flutter এ একটি সাধারণ Widget Tree এর উদাহরণ নিচে দেওয়া হলো:
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Flutter Widget Tree'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('Hello, World!'),
ElevatedButton(
onPressed: () {},
child: Text('Press Me'),
),
],
),
),
),
);
}
}
এই উদাহরণে Widget Tree এর গঠন কেমন তা নিচে ব্যাখ্যা করা হলো:
- MyApp: এই Widget হলো অ্যাপ্লিকেশনের Root Widget। এটি একটি StatelessWidget এবং এটি
MaterialAppWidget কে রিটার্ন করে। - MaterialApp: এটি একটি প্রধান Wrapper Widget যা অ্যাপের থিম, রাউটিং এবং অন্যান্য সেটিংস ধারণ করে। এটি মূলত Android এবং iOS এর Material Design অনুযায়ী UI প্রদান করে।
- Scaffold:
MaterialAppএর মধ্যেScaffoldWidget রয়েছে, যা অ্যাপ্লিকেশনের প্রাথমিক কাঠামো তৈরি করে। এটি অ্যাপের AppBar, Drawer, Body ইত্যাদি ধারণ করতে ব্যবহৃত হয়। - AppBar:
Scaffoldএর একটি উপাদান, যা টপে একটি টাইটেল বা অ্যাকশন বাটন প্রদর্শন করে। - Center: এটি একটি Widget যা তার চাইল্ডকে স্ক্রিনের মাঝখানে অবস্থান করায়।
- Column:
Centerএর চাইল্ড হিসেবে একটিColumnWidget ব্যবহার করা হয়েছে, যা লম্বালম্বিভাবে একাধিক Widget ধারণ করে। - Text এবং ElevatedButton:
Columnএর চাইল্ড হিসেবেTextএবংElevatedButtonWidget গুলো রাখা হয়েছে, যা একসাথে একটি UI উপাদান তৈরি করেছে।
Widget গঠন (Structure of Widgets):
Flutter এ প্রতিটি UI উপাদান একটি Widget হিসেবে উপস্থাপিত হয়। Widgets সাধারণত দুই ধরনের হয়:
- StatelessWidget: এটি একটি Stateless (অপরিবর্তনীয়) Widget, যার স্টেট পরিবর্তন হয় না। এটি সাধারণত স্থির UI উপাদান তৈরি করতে ব্যবহৃত হয়।
- StatefulWidget: এটি একটি Stateful (পরিবর্তনশীল) Widget, যার স্টেট পরিবর্তন হতে পারে। এটি ডাইনামিক UI উপাদান তৈরি করতে ব্যবহৃত হয়, যেখানে ইউজারের ইন্টারঅ্যাকশন বা অ্যাপ্লিকেশনের পরিবর্তনের উপর ভিত্তি করে UI পরিবর্তিত হয়।
StatelessWidget এর উদাহরণ:
class MyStatelessWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Text('I am a Stateless Widget');
}
}
- এই Widget এর স্টেট একবার তৈরি হলে তা আর পরিবর্তন হয় না।
StatefulWidget এর উদাহরণ:
class MyStatefulWidget extends StatefulWidget {
@override
_MyStatefulWidgetState createState() => _MyStatefulWidgetState();
}
class _MyStatefulWidgetState extends State<MyStatefulWidget> {
int _counter = 0;
void _incrementCounter() {
setState(() {
_counter++;
});
}
@override
Widget build(BuildContext context) {
return Column(
children: [
Text('Counter: $_counter'),
ElevatedButton(
onPressed: _incrementCounter,
child: Text('Increment'),
),
],
);
}
}
- এই Widget এ
_counterনামক একটি স্টেট রয়েছে, যা ইউজারের ক্লিকের মাধ্যমে পরিবর্তিত হয়।setState()মেথডের মাধ্যমে Flutter জানানো হয় যে, স্টেট পরিবর্তিত হয়েছে এবং UI পুনরায় রেন্ডার করা হবে।
Widget Tree এবং Build Process:
- Flutter এ প্রতিটি Widget
build()মেথড ব্যবহার করে UI তৈরি করে। যখন কোনো Widget এর স্টেট পরিবর্তন হয়, তখনbuild()মেথড পুনরায় কল হয়ে Widget Tree আপডেট করে। - Widget Tree অ্যাপ্লিকেশনের UI কাঠামোকে নির্ধারণ করে এবং প্রতিটি Widget এর সম্পর্ক এবং তাদের মধ্যে কিভাবে ইন্টারঅ্যাকশন হবে তা ঠিক করে।
Widget Tree এর গুরুত্বপূর্ণ বৈশিষ্ট্য:
- Parent-Child Relationship: প্রতিটি Widget Tree এ Parent-Child সম্পর্ক থাকে, যেখানে একটি Widget এর চাইল্ড অন্য Widget হয়।
- Composition-Based Architecture: Flutter এ Widgets কম্পোজিশন আর্কিটেকচারের ওপর ভিত্তি করে কাজ করে। আপনি ছোট ছোট Widgets একত্রিত করে বড় এবং জটিল Widgets তৈরি করতে পারেন।
- Reusability: Flutter এ Widgets রিইউজেবল, যার মানে একটি Widget বিভিন্ন স্থানে পুনরায় ব্যবহার করা যায়। এটি কোডের পুনঃব্যবহারযোগ্যতা বাড়ায়।
- Immutable Stateless Widgets:
StatelessWidgetগুলো Immutable, যার মানে তারা একবার তৈরি হলে পরিবর্তিত হয় না। - Dynamic Stateful Widgets:
StatefulWidgetগুলো Dynamic, যার মানে তাদের স্টেট পরিবর্তন হতে পারে এবং UI অনুযায়ী রিফ্রেশ হয়।
Flutter এর Widget গঠন সংক্ষেপে:
- Widget Tree: Flutter এ প্রতিটি UI উপাদান একটি Widget হিসেবে গঠিত হয় এবং এটি একটি ট্রি স্ট্রাকচারে সংগঠিত থাকে।
- StatelessWidget: পরিবর্তনহীন এবং স্থির UI তৈরি করতে ব্যবহৃত হয়।
- StatefulWidget: পরিবর্তনশীল এবং ডাইনামিক UI উপাদান তৈরি করতে ব্যবহৃত হয়, যেখানে ইউজারের ইন্টারঅ্যাকশন বা অ্যাপ্লিকেশনের আপডেট অনুসারে স্টেট পরিবর্তিত হয়।
Flutter এ Widget Tree এবং Widget গঠনের ধারণা বুঝে, আপনি উন্নত এবং কার্যকর UI তৈরি করতে পারবেন।
Read more